package cn.kgc.car.dao.impl;

import cn.kgc.car.dao.CarDao;
import cn.kgc.car.dao.Init;
import cn.kgc.car.entity.Car;
import cn.kgc.car.entity.User;
import cn.kgc.car.service.Time;
import cn.kgc.car.service.UserOpera;

import java.io.File;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class CarDaoImpl implements CarDao {
    public static Map<Integer, Car> carMap= Init.carMap;
    public static List<User> users=Init.users;
    static Collection<Car> values=carMap.values();

    static File file=new File("user.txt");

    /**
     * 查看系统内所有已出租的车辆信息车牌号，
     */
    @Override
    public void showRentedCar() {
        System.out.println("车牌号\t汽车品牌\t汽车名\t汽车颜色\t汽车租金\t租出时间");
        for (Car car:values){
            if (car.getStatus()==1){        //判断是否租出
                System.out.println(car.getNum()+"\t"+car.getBrand()+"\t"+car.getName()+car.getColor()+"\t" +
                        car.getPrice()+"\t"+ Time.time(car.getDate()));

            }
        }
    }

    /**
     * 查看系统内所有未出租的车辆信息车牌号
     */
    @Override
    public void showUnRentedCar() {
        System.out.println("车牌号\t汽车类型\t汽车名\t汽车颜色\t汽车租金\t租出时间");
        for (Car car:values){
            if (car.getStatus()==0){        //判断是否租出
                System.out.println(car.getNum()+"\t"+car.getBrand()+"\t"+car.getName()+car.getColor()+"\t" +
                        car.getPrice()+"\t"+Time.time(car.getDate()));
            }
        }
    }

    /**
     * 通过车牌号查询车辆信息
     * @param num
     */
    @Override
    public void showCar(int num,User user) {
    if (carMap.containsKey(num)){
        System.out.println("车牌号\t汽车类型\t汽车名\t汽车租赁状态\t汽车颜色\t汽车租金\t租出时间");
        String chuZu=null ;
        if (carMap.get(num).getStatus()==0){
            chuZu="未出租";

        }else {
            chuZu="已出租";
        }
        System.out.println(carMap.get(num).getNum()+"\t"+carMap.get(num).getBrand()+"\t"+carMap.get(num).getName()+carMap.get(num).getName()+"\t"+chuZu+"\t"+carMap.get(num).getColor()+"\t" +
                carMap.get(num).getPrice()+"\t"+Time.time(carMap.get(num).getDate()));
        }else {
        System.out.println("抱歉!没有查询到该车");
    }
    }

    /**
     * 选择某辆可以出租的车辆完成租车操作
     * @param num
     */
    @Override
    public void getCar(int num,User user) {
    if (carMap.containsKey(num)){
        if (carMap.get(num).getStatus()==0){
            carMap.get(num).setStatus(1);
            System.out.println("租车成功!");
            Date d=new Date();
            carMap.get(num).setDate(new Date());
            String time=Time.time(carMap.get(num).getDate());
            user.getCar().setNum(num);
            Car car = carMap.get(num);
            user.setCar(car);
            users.add(user);
            UserOpera.Seria(users,file);
        }else {
            System.out.println("该车已被他人租用");
        }
    }else {
        System.out.println("抱歉!没有查询到该车");
    }
    }

    /**
     *实现还车操作，还车时用户输入租车天数自动计算需要支付的租金
     * @param num
     * @param
     */
    @Override
    public void alsoCar(int num,int time,User user) {
        if (file.exists()){
            users= (List<User>) UserOpera.unSeria(file);
        }
    if (carMap.containsKey(num)){
        carMap.get(num).setStatus(0);
        users.remove(num);
        System.out.println("需要支付的租金为:"+ carMap.get(num).getPrice()*time);
        UserOpera.Seria(users,file);
    }
    }

    /**
     * 使用文件读取,查看用户的租车记录
     */
    @Override
    public void showUser(User user) {
        System.out.println("车牌号\t汽车品牌\t汽车名\t汽车颜色\t汽车租金\t已租时间");
        System.out.println(user.getCar().getNum()+"\t"+user.getCar().getBrand()+"\t"+user.getCar().getName()+"\t"+user.getCar().getColor()
        +"\t"+user.getCar().getPrice()+"\t"+Time.time(user.getCar().getDate()));
    }
}
